<?php
namespace app\workerman\controller;

/**
 * 用于检测业务代码死循环或者长时间阻塞等问题
 * 如果发现业务卡死，可以将下面declare打开（去掉//注释），并执行reload
 * 然后观察一段时间workerman.log看是否有process_timeout异常
 */
//declare(ticks=1);

use \GatewayWorker\Lib\Gateway;

/**
 * 主逻辑
 * 主要是处理 onConnect onMessage onClose 三个方法
 * onConnect 和 onClose 如果不需要可以不用实现并删除
 */
class EventsController
{

    /**
     * 当客户端连接时触发
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {
        //发送连接成功的确认消息
        Gateway::sendToClient($client_id, json_encode([
            "code" => 0,
            "msg"  => "connected",
            "data" => ["client_id" => $client_id],
        ], JSON_UNESCAPED_UNICODE));
    }

    /**
     * 当客户端发来消息时触发
     * @param int   $client_id 连接id
     * @param mixed $message   具体消息
     */
    public static function onMessage($client_id, $message)
    {
        $req_data   = json_decode($message, true);

        if($req_data['group'] && $req_data['type'])
        {
            $group      = explode(',',$req_data['group']);
            $type       = explode(',',$req_data['type']);

            foreach ($group as $key => $value) {
                foreach ($type as $k => $v) {
                    Gateway::joinGroup($client_id, $v.'_'.$value);
                }
            }
        }


//        if($req_data['type'] == 'hangqing') {
//            Gateway::joinGroup($client_id, $req_data['type'].'_'.$req_data['group']);
//        }

        return;//上行数据由http请求处理
    }

    /**
     * 当用户断开连接时触发
     *
     * @param int $client_id 连接id
     */
    public static function onClose($client_id)
    {
    }

}